From 710a8435cce5511d8e7d0e441e3a079122076a6a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 10 Dec 2011 02:02:29 +0100 Subject: [PATCH] rbtree: Add _gtk_rbtree_contains() It's useful in a bunch of places, so split it out --- gtk/gtkrbtree.c | 25 +++++++++++++++++++++++++ gtk/gtkrbtree.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/gtk/gtkrbtree.c b/gtk/gtkrbtree.c index d6dc93833f..1b6d7f5cc8 100644 --- a/gtk/gtkrbtree.c +++ b/gtk/gtkrbtree.c @@ -880,6 +880,31 @@ _gtk_rbtree_reorder (GtkRBTree *tree, g_free (nodes); } +/** + * _gtk_rbtree_contains: + * @tree: a tree + * @potential_child: a potential child of @tree + * + * Checks if @potential_child is a child (direct or via intermediate + * trees) of @tree. + * + * Returns: %TRUE if @potentitial_child is a child of @tree. + **/ +gboolean +_gtk_rbtree_contains (GtkRBTree *tree, + GtkRBTree *potential_child) +{ + g_return_val_if_fail (tree != NULL, FALSE); + g_return_val_if_fail (potential_child != NULL, FALSE); + + do { + potential_child = potential_child->parent_tree; + if (potential_child == tree) + return TRUE; + } while (potential_child != NULL); + + return FALSE; +} gint _gtk_rbtree_node_find_offset (GtkRBTree *tree, diff --git a/gtk/gtkrbtree.h b/gtk/gtkrbtree.h index 173b141beb..931f7c69a1 100644 --- a/gtk/gtkrbtree.h +++ b/gtk/gtkrbtree.h @@ -117,6 +117,8 @@ gboolean _gtk_rbtree_is_nil (GtkRBNode *node); void _gtk_rbtree_reorder (GtkRBTree *tree, gint *new_order, gint length); +gboolean _gtk_rbtree_contains (GtkRBTree *tree, + GtkRBTree *potential_child); GtkRBNode *_gtk_rbtree_find_count (GtkRBTree *tree, gint count); void _gtk_rbtree_node_set_height (GtkRBTree *tree, -- 2.30.2